<?php
// +-----------------------------------------------------------------------+
// |                                                                       |
// | WebFormsQA     (Question - Answer)                                    |
// | Copyright  (C) 2010                                                   |
// | Official site  www.scale-tech.ru                                      |
// | email          scale-tech@mail.ru                                     |
// | autor          Alexander Demachev                                     |
// |                                                                       |
// | This program is free software; you can redistribute it and/or modify  |
// | it under the terms of the GNU General Public License as published by  |
// | the Free Software Foundation; version 2 of the License.               |
// |                                                                       |
// | This program is distributed in the hope that it will be useful,       |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of        |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         |
// | GNU General Public License for more details.                          |
// +-----------------------------------------------------------------------+

/*!
 * @page SearchQuestionPage Исходный код класса SearchQuestion
 * @include search_question.class.php
 */

/*! @addtogroup ClassWebFormsQA Основные классы проекта
 *  Группа включает основные классы используемые в проекте WebFormsQA
 *  @{
 */


/**
 * @class SearchQuestion
 * @brief Класс для поиска информации в базе "Questions" \n
 * @ref SearchQuestionPage
 */
class SearchQuestion extends Search {

    /** 
     * @brief Поиск фразы или слова целиком
     *
     * @param string &$str_search   - строка для поиска
     * @param array  &$out          - двумерный массив результата, каждый элемент массива
     * -                              запись из таблицы QUESTION
     *
     * ПРИМЕЧАНИЕ:     Метод удаляет из строки все некорректный символы,
     *                 которые нельзя использовать в строке запроса или экранирует их
     *
     * @return integer              - количество найденных записей
     */
    function searchPhrase(&$str_search, &$out)
    {
        $base   = &$this->base;
        $out    = array();
        $result = 0;

        $str_search = $base->validate_search_string($str_search);

        // ищем наличие фразы в полях question или answer
        // символ % - значит любой набор символов перед или после
        $q = $base->db_query("
          SELECT *
          FROM ".QUESTION_TABLE."
          WHERE question LIKE '%$str_search%' OR answer LIKE '%$str_search%'
          ORDER BY ID "
        ) or die ($base->db_error());


        while ($row = $base->db_fetch_row($q)) {
            $out[] = $row;
            $result++;
        }

        return $result;
    }


    /** 
     * @brief Поиск фразы в полях "вопрос" и "ответ" таблицы QUESTION_TABLE в различных комбинациях
     *
     * @param int $mode				- режим поиска:
     * -#							  1 - поиск только в названии вопроса
     * -#							  2 - поиск только в названии ответа 
     * -#							  3 - поиск и названии вопроса и в названии названии ответа
     * -#							  default - поиск и названии вопроса и в названии названии ответа
     *   
     * @param string &$str_search   - строка для поиска
     * @param array  &$out          - двумерный массив результата, каждый элемент массива
     *                                запись из таблицы QUESTION + имя категории
     * @param bool $flag_order		- признак сортировки результата по имени категории                                
     *
     * ПРИМЕЧАНИЕ:     Метод удаляет из строки все некорректный символы,
     *                 которые нельзя использовать в строке запроса или экранирует их
     *
     * @return integer              - количество найденных записей
     */
    function searchPhraseInQuestionAnswer($mode, &$str_search, &$out, $flag_order )
    {
        $base   = &$this->base;
        $out    = array();
        $result = 0;
        $condition = "";
        $order = "";
        
        $str_search = $base->validate_search_string($str_search);     
        if( $flag_order ) $order = " ORDER BY t2.name"; 
        
        switch( $mode ) {
        	case 1:		$condition = "question LIKE '%$str_search%'";        								break;
        	case 2:     $condition = "answer LIKE '%$str_search%'";         								break;
        	case 3:		$condition = "( question LIKE '%$str_search%' OR answer LIKE '%$str_search%' )";	break;
        	default:    $condition = "( question LIKE '%$str_search%' OR answer LIKE '%$str_search%' )";	break; 
        }

/*        
        $str = "
            SELECT t1.*, t2.name
            FROM ".QUESTION_TABLE." as t1,
                ".CATEGORIES_TABLE." as t2
            WHERE $condition 
                AND t1.categoryID=t2.categoryID 
        		$order ";
		echo "<br> $str <br>";
*/		        		
        
        $q = $base->db_query("
            SELECT t1.*, t2.name
            FROM ".QUESTION_TABLE." as t1,
                ".CATEGORIES_TABLE." as t2
            WHERE $condition 
                AND t1.categoryID=t2.categoryID 
        		$order "
        ) or die($this->db_error());
        
        while ($row = $base->db_fetch_row($q)) {
            $out[] = $row;
            $result++;
        }

        return $result;
    }
    
    
    /** поиск по наличию ключевых слов фразы в разных местах строки или записи. */
    function searchKeywords()
    {
        return false;
    }


    /** расширенный поиск, самый сложный вид поиска. */
    function searchExpand()
    {
        return false;
    }


} // end class SearchQuestion

/*! @} */

?>
